package com.drollo77.demc;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class PosicionesDbAdapter {
	
	private static final String TAG = "DondeEstaMiCoche";
	
	private static final String DATABASE_NAME = "dondeestamicoche"; 
	private static final int DATABASE_VERSION = 1;
	//Etiquetas para tabla de posiciones
	public static final String POSICIONES_TABLE = "posiciones";
	public static final String KEY_P_NOMBRE = "nombre_posicion";
	public static final String KEY_P_LATITUD = "latitud";
	public static final String KEY_P_LONGITUD = "longitud";
	public static final String KEY_P_ALTURA = "altura";
	public static final String KEY_P_FECHA = "fecha";
	public static final String KEY_P_ROWID = "_id";
	
	private DatabaseHelper mDbHelper;
	private SQLiteDatabase mDb;

	private static final String POSICIONES_CREATE = 
			"create table " + POSICIONES_TABLE + " ("
			+ KEY_P_ROWID + " integer primary key autoincrement, "
			+ KEY_P_NOMBRE + " text not null, "
			+ KEY_P_LATITUD + " text not null, "
			+ KEY_P_LONGITUD + " text not null, "
			+ KEY_P_ALTURA + " text not null, "
			+ KEY_P_FECHA + " integer not null);";
	
	private final Context mCtx;
	public PosicionesDbAdapter(Context ctx) {
		this.mCtx = ctx;
	}
	
	private static class DatabaseHelper extends SQLiteOpenHelper {
		DatabaseHelper(Context context) {
			super(context, DATABASE_NAME, null, DATABASE_VERSION);
		}
		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(POSICIONES_CREATE);
		}
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// Not used, but you could upgrade the database with ALTER
			// Scripts
		}
	}
	
	public PosicionesDbAdapter open() throws android.database.SQLException {
		mDbHelper = new DatabaseHelper(mCtx);
		mDb = mDbHelper.getWritableDatabase();
		return this;
	}
	
	public synchronized  void close() {
		if(mDbHelper != null){
			mDbHelper.close();
		}
	}
	
	public long nuevaPosicion (String rowId,String nombre, String latitud, String longitud, String altura, long fecha) {
		ContentValues initialValues = new ContentValues();
		if(!rowId.equals("")){
			initialValues.put(KEY_P_ROWID, rowId);
		}
		initialValues.put(KEY_P_NOMBRE, nombre);
		initialValues.put(KEY_P_LATITUD, latitud);
		initialValues.put(KEY_P_LONGITUD, longitud);
		initialValues.put(KEY_P_ALTURA, altura);
		initialValues.put(KEY_P_FECHA, fecha);
		Cursor mCursor = mDb.query(true, POSICIONES_TABLE, new String[] {KEY_P_ROWID,KEY_P_NOMBRE, KEY_P_LATITUD, KEY_P_LONGITUD, KEY_P_ALTURA, KEY_P_FECHA}, KEY_P_NOMBRE + "='" + nombre + "'", null, null, null, null, null);
		if((mCursor != null) &&(mCursor.getCount()==0)){
			return mDb.insert(POSICIONES_TABLE, null, initialValues);
		}else{
			return (-1);
		}
	}
	
	public boolean borraPosicion (long rowId) {
		return	mDb.delete(POSICIONES_TABLE, KEY_P_ROWID + "=" + rowId, null) > 0;
	}
		
	public Cursor listaTodasPosiciones() {
		return mDb.query(POSICIONES_TABLE, new String[] {KEY_P_ROWID, KEY_P_NOMBRE,KEY_P_LATITUD, KEY_P_LONGITUD, KEY_P_ALTURA, KEY_P_FECHA}, null, null, null, null, null);
	}
		
	public Cursor listaPosicion (long rowId) throws SQLException {
		Log.d(TAG,"DbAdapter: cursor buscando id " + rowId);
		Cursor mCursor = mDb.query(true, POSICIONES_TABLE, new String[] {KEY_P_ROWID,KEY_P_NOMBRE, KEY_P_LATITUD, KEY_P_LONGITUD, KEY_P_ALTURA, KEY_P_FECHA}, KEY_P_ROWID + "=" +	rowId, null, null, null, null, null);
		Log.d(TAG,"DbAdapter: cursor resultado " + mCursor.toString());
		if (mCursor != null) {
			mCursor.moveToFirst();
		}
		return mCursor;
	}
		
	public void inicia_transaccion (){
		mDb.beginTransaction();
	}
	
	public boolean transaccion_activa (){
		if(mDb.inTransaction()){
			return true;
		}else{
			return false;
		}
	}
	
	public void fin_transaccion(boolean result){
		if(result == true){
			try{
				mDb.setTransactionSuccessful();
			}catch (Exception e){
				Log.d("database_adapter","error al marcar la transaccion");
			}			
		}
		mDb.endTransaction();
	}
		
	public boolean isLocked (){
		return mDb.isDbLockedByCurrentThread();
	}
}
